#include <bits/stdc++.h>

#define in read()
#define fi first
#define se second
#define pb push_back
#define rep(i, x, y) for(int i = (x); i <= (y); i++)
#define per(i, x, y) for(int i = (x); i >= (y); i--)

using namespace std;

typedef long long ll;
typedef double db;
typedef vector < int > vec;
typedef pair < int , int > pii;

int read() {
    int x = 0; bool f = 0; char ch = getchar(); while(!isdigit(ch)) f |= ch == '-',ch = getchar();
    while(isdigit(ch)) x = x * 10 + (ch ^ 48),ch = getchar(); return f ? -x : x;
}

const int N = 2.5e5 + 10;

int n, m;
vec a[N];

int count(const vec &a, const vec &b) {
	int cnt = 0; rep(i, 0, m - 1) if(a[i] != b[i]) cnt++;
	return cnt;
}

bool check(vec &t) {
	rep(i, 1, n) {
		int cnt = 0, p = -1;
		rep(j, 0, m - 1) if(t[j] != a[i][j]) { cnt++; if(t[j] == -1) p = j; }
		if(cnt <= 2) continue;
		if(cnt > 3) return false;
		if(!~p) return false; t[p] = a[i][p];
	} return true;
}

void out(const vec &a) { puts("Yes"); rep(i, 0, m - 1) printf("%d ", max(a[i], 1)); }

int main() {
#ifndef ONLINE_JUDGE
    freopen("1.in","r",stdin);
#endif
    n = in, m = in; rep(i, 1, n) rep(j, 1, m) a[i].pb(in);
	int mx = 0; rep(i, 2, n) mx = max(mx, count(a[1], a[i]));
	if(mx <= 2) return out(a[1]), 0;
	if(mx > 4) return puts("No"), 0;
	rep(i, 2, n)
		if(count(a[i], a[1]) == mx) {
			vec pos;
			rep(j, 0, m - 1) if(a[1][j] != a[i][j]) pos.pb(j);
			for(auto x : pos)
				for(auto y : pos)
					if(x ^ y) {
						vec tmp = a[1];
						tmp[x] = a[i][x];
						tmp[y] = -1;
						if(check(tmp)) return out(tmp), 0;
					}
			puts("No"); return 0;
		}
	assert(0); return 0;
}
